package com.xinyue.game.message;

import java.nio.charset.StandardCharsets;

import com.xinyue.game.utils.ByteBufUtil;

import io.netty.buffer.ByteBuf;
import lombok.Data;

/**
 * 游戏网关消息包头，指网关接收客户端消息的包头
 *
 * @author 王广帅
 * @since 2021/11/6 23:25
 */
@Data
public class GameGatewayMessageHeader {

    // 当前header字段总占字节长度

    private final static int HEADER_LEN = 40;
    /**
     * 业务消息id
     */
    private int logicMessageId;
    /**
     * 服务id,指提供固定服务的进程的id
     */
    private short gameServiceId;
    /**
     * 游戏ID，实现网关支持多款不同类型的游戏
     */
    private short gameId;
    /**
     * 请求的唯一标识，是一个以时间开头的，32位长度的字符串
     */
    private String requestId;

    /**
     * 读取消息头的内容
     *
     * @param byteBuf
     */
    public void readHeader(ByteBuf byteBuf) {
        this.logicMessageId = byteBuf.readInt();
        this.gameServiceId = byteBuf.readShort();
        this.gameId = byteBuf.readShort();
        this.requestId = ByteBufUtil.readString(32, byteBuf);
    }

    public int getTotalSize() {
        return HEADER_LEN;
    }

    public void writeHeader(ByteBuf byteBuf) {
        byteBuf.writeInt(this.logicMessageId);
        byteBuf.writeShort(this.gameServiceId);
        byteBuf.writeShort(this.gameId);
        byte[] requestIdBytes = this.getRequestId().getBytes(StandardCharsets.UTF_8);
        byteBuf.writeBytes(requestIdBytes);
    }


}
